from django.contrib.auth.models import AbstractUser
from django.db import models


# Create your models here.
class User(AbstractUser):
    name = models.CharField(max_length=200, verbose_name='姓名', blank=True, null=True)
    title = models.CharField(max_length=200, verbose_name='职称', choices=(
        ('讲师', '讲师'),
        ('副教授', '副教授'),
        ('教授', '教授'),
        ('助教', '助教'),
        ('无', '无')), default='无')
    avatar = models.CharField(max_length=255, verbose_name='头像', blank=True, null=True)
    phone_num = models.CharField(max_length=255, verbose_name='手机号', blank=True, null=True)
    contact_address = models.CharField(max_length=255, verbose_name='联系地址', blank=True, null=True)
    # 是否是共产党员
    is_cp = models.BooleanField(default=False, verbose_name='是否是共产党员')
    # 学位（只能选学士、硕士、博士），choices值学士、硕士、博士
    degree = models.CharField(max_length=200, verbose_name='学位', choices=(
        ('学士', '学士'),
        ('硕士', '硕士'),
        ('博士', '博士'),
    ), blank=True, null=True)
    # 是否是名师choices值：校级教学名师  集团级教学名师  市厅级教学名师 省级教学名师   国家级教学名师  不是名师
    is_good_teacher = models.CharField(max_length=200, verbose_name='是否是名师', choices=(
        ('校级教学名师', '校级教学名师'),
        ('集团级教学名师', '集团级教学名师'),
        ('市厅级教学名师', '市厅级教学名师'),
        ('省级教学名师', '省级教学名师'),
        ('国家级教学名师', '国家级教学名师'),
        ('不是名师', '不是名师'),
    ), blank=True, null=True, default='不是名师')
    # 所属教研室choices为 数智教研室 计算机教研室 通号教研室 非教研室人员
    department = models.CharField(max_length=200, verbose_name='所属教研室', choices=(
        ('数智教研室', '数智教研室'),
        ('计算机教研室', '计算机教研室'),
        ('智能信息教研室', '智能信息教研室'),
        ('通号教研室', '通号教研室'),
        ('非教研室人员', '非教研室人员'),
    ), default='非教研室人员')
    # 其它头衔
    other_title = models.CharField(max_length=200, verbose_name='其它头衔', blank=True, null=True)
    # 基础评分
    base_score = models.FloatField(verbose_name='基础评分', default=0)

    def __str__(self):
        return self.username

    def get_base_score(self):
        """
        序号 项目 考核指标及说明
          1 个人基本情况
          共产党员（含预备党员），1 分
          硕士学位（不含在读），3 分
          博士学位（不含在读），6 分
          讲师，3 分
          副教授，6 分
          教授，10 分
          校级教学名师，1 分
          集团级教学名师，2 分
          市厅级教学名师，4 分
          省级教学名师，6 分
          国家级教学名师，10 分
          说明：其他类别与教学相关头衔，参考执行
          self.base_score
        :return:
        """
        if self.is_cp:
            self.base_score += 1
        if self.degree == '硕士':
            self.base_score += 3
        elif self.degree == '博士':
            self.base_score += 6
        if self.title == '讲师':
            self.base_score += 3
        elif self.title == '副教授':
            self.base_score += 6
        elif self.title == '教授':
            self.base_score += 10
        if self.is_good_teacher == '校级教学名师':
            self.base_score += 1
        elif self.is_good_teacher == '集团级教学名师':
            self.base_score += 2
        elif self.is_good_teacher == '市厅级教学名师':
            self.base_score += 4
        elif self.is_good_teacher == '省级教学名师':
            self.base_score += 6
        elif self.is_good_teacher == '国家级教学名师':
            self.base_score += 10

    def save(self, *args, **kwargs):
        self.full_clean()  # 调用clean方法进行验证
        self.base_score = 0
        self.get_base_score()
        super().save(*args, **kwargs)  # 保存实例以生成ID
